优化+测试:Vue 3 模板项目加载组件库
概述
组件库构建完成后,需要将模板项目中的本地组件替换为组件库包。本节介绍如何在本地测试组件库的集成效果,包括清理本地组件代码、配置本地包引用、验证组件加载是否正常,为后续发布到 npm 做准备。
集成流程
从本地组件到组件库包的迁移路径
模板项目本地 components/ → 删除本地组件 → 引用组件库包 → 本地测试 → 发布 npm
text
需要清理的模块
| 模块 | 操作 | 注意事项 |
|---|---|---|
components/ | 删除全部 | 已移入组件库包 |
directives/ | 删除全部 | 已移入组件库包 |
i18n/ | 仅删除 i18n 相关内容 | 保留其他国际化配置 |
utils/ | 部分保留 | 检查 layout 中的引用,保留被使用的工具函数 |
操作步骤
1. 检查依赖引用关系
在删除模块前,先全局搜索确认哪些文件仍在引用目标模块:
# 搜索 utils 的引用
grep -r "from.*@/utils" src/
grep -r "from.*utils/" src/
# 搜索 components 的引用
grep -r "from.*@/components" src/
bash
2. 保留被引用的工具函数
经检查,default 页面仍引用了 utils 中的两个方法:
// src/pages/default.vue
import { darker } from '@/utils/color'
import { formatToHandphone } from '@/utils/format'
typescript
这些工具函数需暂时保留在项目中,或迁移到组件库包中统一导出。
3. 本地测试组件库包
使用 pnpm link 将本地组件库包链接到模板项目:
# 在组件库项目中构建并链接
cd packages/components
pnpm build
pnpm link --global
# 在模板项目中链接组件库
cd admin-template
pnpm link --global @vp/components
bash
或使用 workspace:* 协议(monorepo 项目):
// package.json
{
"dependencies": {
"@vp/components": "workspace:*"
}
}
json
4. 注册组件库
// src/main.ts
import { createApp } from 'vue'
import VpComponents from '@vp/components'
import '@vp/components/dist/style.css'
import App from './App.vue'
const app = createApp(App)
app.use(VpComponents)
app.mount('#app')
typescript
5. 自动导入配置
避免逐页面手动 import,使用 unplugin-vue-components 实现按需自动导入:
// vite.config.ts
import Components from 'unplugin-vue-components/vite'
import { VpResolver } from '@vp/components/resolver'
export default defineConfig({
plugins: [
Components({
resolvers: [VpResolver()]
})
]
})
typescript
本地测试验证清单
| 检查项 | 验证方法 |
|---|---|
| 组件渲染 | 页面中组件是否正常显示 |
| 样式加载 | 检查组件样式是否完整(CSS 文件引入) |
| 事件传递 | 组件事件(emit)是否正常触发 |
| TypeScript 类型 | IDE 中组件类型提示是否正常 |
| 暗黑模式 | 切换主题后组件样式是否正确 |
| 构建打包 | pnpm build 是否正常通过 |
常见问题排查
组件样式丢失
// 确保在入口文件引入样式
import '@vp/components/dist/style.css'
typescript
TypeScript 类型无法识别
// tsconfig.json
{
"compilerOptions": {
"types": ["@vp/components/dist/types"]
}
}
json
pnpm link 后包未生效
# 清除缓存重新安装
rm -rf node_modules/.pnpm
pnpm install
bash
实践要点
- 删除本地模块前,务必全局搜索引用关系,避免遗漏依赖导致运行时报错
utils中被页面直接使用的工具函数(如formatToHandphone、darker)需保留或迁移到组件库统一导出- 本地测试使用
pnpm link或workspace:*协议,避免每次修改都发布 npm - 组件库通过
app.use()全局注册后,模板中可直接使用组件标签,无需逐页 import - 使用
unplugin-vue-components实现按需自动导入,减少打包体积 - 测试通过后再发布到 npm,确保组件库在真实项目中可用
↑